جزوه · فصل نهم · جلسه ۸۸ · دستور if ← بازگشت به فهرست
📘 فصل نهم · جلسه ۸۸ دستور if
📅 تاریخ: پنجشنبه، ۴ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث بسیار مهم در اسکریپت‌نویسی است. دستور if و ساختارهای شرطی، قلب تصمیم‌گیری در اسکریپت‌ها هستند و در آزمون‌های LPIC و RHCSA بسیار پرتکرارند.
🤔 قبل از شروع، یه مثال ساده:

فرض کن یه چراغ راهنمایی داری که تصمیم می‌گیره اگر چراغ قرمز بود بایست، اگر سبز بود حرکت کن. توی لینوکس، دستور if دقیقاً همینه: به اسکریپت شما اجازه می‌ده شرایط مختلف رو بررسی کنه و بر اساس اون تصمیم بگیره. این جلسه بهت یاد میده چطور با if، else و elif اسکریپت‌های هوشمند بنویسی!

▍ ساختار if در Bash

دستور if در Bash برای تصمیم‌گیری بر اساس شرایط استفاده می‌شود. ساختار کلی آن به این صورت است:

if [ شرط ]; then دستورات (در صورت درست بودن شرط) fi

نکات مهم:

🔑 نکته کلیدی: if بر اساس کد خروجی (Exit Status) شرط تصمیم می‌گیرد. اگر کد خروجی 0 باشد (شرط درست)، دستورات داخل then اجرا می‌شوند.

▍ ساختار if-else

با else می‌توانید کاری را انجام دهید که اگر شرط نادرست بود، اجرا شود.

if [ شرط ]; then دستورات (در صورت درست بودن شرط) else دستورات (در صورت نادرست بودن شرط) fi

▍ ساختار if-elif-else

با elif (مخفف else if) می‌توانید چندین شرط را پشت سر هم بررسی کنید.

if [ شرط ۱ ]; then دستورات (شرط ۱ درست) elif [ شرط ۲ ]; then دستورات (شرط ۲ درست) else دستورات (هیچ شرطی درست نبود) fi

▍ مثال‌های عملی از تصاویر

• مثال ۱: بررسی وجود فایل با آرگومان خط فرمان

این اسکریپت بررسی می‌کند که آیا کاربر آرگومان (نام فایل) به اسکریپت داده است یا نه. اگر داده باشد، وجود فایل را بررسی می‌کند.

#!/bin/bash # بررسی آرگومان و وجود فایل if [ -z "$1" ]; then echo "لطفا یک نام فایل وارد کنید" else # بررسی وجود فایل if [ -f "$1" ]; then echo "فایل وجود دارد" else echo "فایل وجود ندارد" fi fi
┌──(ya3in㉿kali)-[~] └─$ ./if2.sh لطفا یک نام فایل وارد کنید └─$ ./if2.sh test.txt فایل وجود ندارد └─$ touch test.txt └─$ ./if2.sh test.txt فایل وجود دارد

توضیح:

نکته: -z بررسی می‌کند که آیا یک رشته خالی است یا نه. این برای بررسی آرگومان‌ها بسیار مفید است.

• مثال ۲: مقایسه عدد با if

#!/bin/bash # مقایسه عدد با ۱۰ NUMBER=12 if [ "$NUMBER" -gt 10 ]; then echo "عدد بزرگتر از 10 است" else echo "عدد 10 یا کوچکتر است" fi
┌──(ya3in㉿kali)-[~] └─$ ./if3.sh عدد بزرگتر از 10 است

اگر NUMBER=8 باشد:

┌──(ya3in㉿kali)-[~] └─$ ./if3.sh عدد 10 یا کوچکتر است

توضیح: -gt یعنی Greater Than (بزرگتر از). اگر عدد از ۱۰ بزرگتر باشد، شرط درست است.

• مثال ۳: بررسی رمز عبور با test

در این مثال از test به جای [ ] استفاده شده است. هر دو معادل هستند.

#!/bin/bash # بررسی رمز عبور با test read -p "Enter a password: " pass if test "$pass" == "mabedini"; then echo "Password verified." fi
┌──(ya3in㉿kali)-[~] └─$ ./if_test.sh Enter a password: mabedini Password verified.

توضیح: test "$pass" == "mabedini" بررسی می‌کند که آیا رمز وارد شده با mabedini برابر است یا نه.

نکته: test و [ ] هر دو معادل هستند. استفاده از [ ] در Bash رایج‌تر است.

• مثال ۴: رمز عبور مخفی با -s

#!/bin/bash # بررسی رمز عبور مخفی read -s -p "Enter a password: " pass echo if test "$pass" == "mabedini"; then echo "Password verified." else echo "Password incorrect!" fi
┌──(ya3in㉿kali)-[~] └─$ ./if4.sh Enter a password: (چیزی نمایش داده نمی‌شود) Password verified.

توضیح: -s باعث می‌شود که رمز در ترمینال نمایش داده نشود. echo خالی برای رفتن به خط بعد استفاده شده است.

▍ عملگرهای مقایسه‌ای در if

نوع عملگر معنی
اعداد -eq برابر (Equal)
-ne نابرابر (Not Equal)
-gt بزرگتر (Greater Than)
-lt کوچکتر (Less Than)
-ge بزرگتر یا مساوی (Greater or Equal)
-le کوچکتر یا مساوی (Less or Equal)
رشته‌ها = برابر
!= نابرابر
-z خالی است
-n غیرخالی است
فایل‌ها -e وجود دارد
-f فایل معمولی وجود دارد
-d دایرکتوری وجود دارد
-r قابل خواندن است
-w قابل نوشتن است
-x قابل اجرا است

▍ نکات مهم در استفاده از if

⚠️ نکات طلایی:
  • حتماً بین [ و شرط و ] فاصله بگذارید: [ "$var" = "value" ] ✅ درست — ["$var"="value"] ❌ اشتباه
  • رشته‌ها را حتماً داخل دابل کوتیشن (" ") قرار دهید: [ "$name" = "Ali" ]
  • برای متغیرهای عددی نیازی به کوتیشن نیست: [ $num -gt 10 ]
  • برای چند شرط از && (AND) و || (OR) استفاده کنید: [ "$age" -gt 18 ] && [ "$age" -lt 60 ]
  • هر if باید با fi بسته شود.

▍ مثال ترکیبی: بررسی کاربر

#!/bin/bash # بررسی کاربر read -p "Enter username: " username read -s -p "Enter password: " password echo if [ "$username" = "admin" ] && [ "$password" = "1234" ]; then echo "ورود موفق! خوش آمدید." elif [ "$username" = "guest" ]; then echo "ورود مهمان!" else echo "نام کاربری یا رمز عبور اشتباه است!" fi
نکته: با && می‌توانید چند شرط را با هم ترکیب کنید (همه شرط‌ها باید درست باشند). با || حداقل یکی از شرط‌ها باید درست باشد.

▍ جمع‌بندی و نکات مهم

✅ جمع‌بندی نهایی:
  • if → برای تصمیم‌گیری بر اساس شرایط استفاده می‌شود.
  • then → بعد از شرط، برای اجرای دستورات در صورت درست بودن شرط.
  • else → برای اجرای دستورات در صورت نادرست بودن شرط.
  • elif → برای بررسی چندین شرط پشت سر هم.
  • fi → پایان بلوک if (if برعکس).
  • test و [ ] → برای نوشتن شرط‌ها استفاده می‌شوند.
  • && → AND (همه شرط‌ها باید درست باشند).
  • || → OR (حداقل یکی از شرط‌ها باید درست باشد).
📝 تمرین پیشنهادی:

یک اسکریپت بنویسید که:

  • از کاربر یک عدد بگیرد.
  • با if بررسی کند که عدد مثبت، منفی یا صفر است.
  • با elif هر سه حالت را پوشش دهد.
  • پیام مناسب چاپ کند: «عدد مثبت است»، «عدد منفی است» یا «عدد صفر است».